/**
 * 文件夹操作
 */

const fs = require("fs");
const os = require('os');
const path = require('path');


/*
  fs.mkdir("path",[mode],callback(err))  以异步的方式创建文件目录。如果目录已存在，将抛出异常。需一层一层创建
  path: 将创建的目录路径
　mode: 目录权限（读写权限），默认为0777
　callback: 回调，传递异常参数err
*/
function _mkdir() {
  fs.mkdir("./test/testDir", 0777, (err) => {
    if (!err) {
      console.log("创建目录成功");
    } else {
      console.log("创建目录失败: ", err);
    }
  })
}

// _mkdir();

/*
  fs.mkdirSync("path",[mode])  以同步的方式创建文件目录。如果目录已存在，将抛出异常。需一层一层创建
  path: 将创建的目录路径
　mode: 目录权限（读写权限），默认为0777
*/
function _mkdirSync() {
  fs.mkdirSync("./test/testDir", 0777);
}

// _mkdirSync();


/*
  fs.rmdir("path",callback(err))  以异步的方式删除目录。
  path: 将删除的目录路径
　callback: 回调，传递异常参数err
*/
function _rmdir() {
  fs.rmdir("./test/testDir", (err) => {
    if (!err) {
      console.log("删除目录成功");
    } else {
      console.log("删除目录失败: ", err);
    }
  })
}

// _rmdir();

/*
  fs.rmdirSync("path",callback(err))  以同步的方式删除目录。
  path: 将删除的目录路径
*/
function _rmdirSync() {
  fs.rmdirSync("./test/testDir");
}

// _rmdirSync();


/*
  fs.mkdtemp(prefix[, options], callback) 生成六个随机字符，附加在所需的 prefix 后面以异步方式创建唯一的临时目录。
　prefix: 必须以平台特定的尾随路径分隔符（require('path').sep）结尾。
  callback: (err, directory) 回调，传递异常参数err, 创建的目录路径作为字符串传递给回调的第二个参数。
*/
function _mkdtemp() {
  const tmpDir = os.tmpdir(); // 新临时目录的父目录
  const seq = path.sep; // 平台特定的尾随路径分隔符
  fs.mkdtemp(`${tmpDir}${seq}`, (err, directory) => {
    if (!err) {
      console.log(`删除临时目录成功,目录路径: ${tmpDir}${seq}, 目录名: ${directory}`);
    } else {
      console.log("删除临时目录失败: ", err);
    }
  })
}

// _mkdtemp();

/*
  fs.mkdtempSync(prefix[, options]) 生成六个随机字符，附加在所需的 prefix 后面以同步方式创建唯一的临时目录。
　prefix: 必须以平台特定的尾随路径分隔符（require('path').sep）结尾。
  返回创建的目录路径。
*/
function _mkdtempSync() {
  const tmpDir = os.tmpdir(); // 新临时目录的父目录
  const seq = path.sep; // 平台特定的尾随路径分隔符
  const filePath = fs.mkdtempSync(`${tmpDir}${seq}`);
  console.log(filePath);
}

// _mkdtempSync();



/*
  fs.readdir(path[, options], callback)  以异步的方式读取目录的内容。
  path: 将读取的目录路径
  options: encoding, 默认'utf8'; withFileTypes, 默认 false。
           如果 options.withFileTypes 设置为 true，则 files 数组将包含 <fs.Dirent> 对象。
　callback: 回调有两个参数 (err, files)，传递异常参数err, files 是目录中文件名的数组，不包括 '.' 和 '..'。
*/
function _readdir() {
  fs.readdir("./test", (err, files) => {
    if (!err) {
      console.log("读取目录成功, 目录内容: ", files);
    } else {
      console.log("读取目录失败: ", err);
    }
  })
}

// _readdir();

/*
  fs.readdirSync(path[, options])  以同步的方式读取目录的内容。
  path: 将读取的目录路径
  options: encoding, 默认'utf8'; withFileTypes, 默认 false。
           如果 options.withFileTypes 设置为 true，则 files 数组将包含 <fs.Dirent> 对象。
*/
function _readdirSync() {
  const files = fs.readdirSync("./test");
  console.log("目录内容: ", files);
}

// _readdirSync();